package com.wonders.hisdoctor.station.project.base.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wonders.his.common.utils.validator.group.InsertGroup;
import com.wonders.his.common.utils.validator.group.PrimaryGroup;
import com.wonders.his.common.utils.validator.group.UpdateGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * <p>药品价格</p>
 * <p>db_table: DRUG_PRICE_LIST</p>
 * @author sunxiaochuan
 * @date 2021/01/20
 */
@ApiModel("药品价格")
@Accessors(chain = true)
@Data
@ToString
@TableName("DRUG_PRICE_LIST")
public class DrugPriceList implements Serializable {

    private static final long serialVersionUID = 5195849664641706101L;

    /** `主键` db_field: DRUG_CODE; desc: 药品代码：由药品字典定义的代码 */
    @ApiModelProperty("药品代码：由药品字典定义的代码")
    @NotNull(message = "药品代码：由药品字典定义的代码不能为空", groups = {PrimaryGroup.class, InsertGroup.class, UpdateGroup.class})
    @Length(max = 10, message = "`药品代码：由药品字典定义的代码`的长度不能大于10")
    @TableField("DRUG_CODE")
    private String drugCode;

    /** `主键` db_field: DRUG_SPEC; desc: 规格：反映药品的含量以及包装 */
    @ApiModelProperty("规格：反映药品的含量以及包装")
    @NotNull(message = "规格：反映药品的含量以及包装不能为空", groups = {PrimaryGroup.class,InsertGroup.class,UpdateGroup.class})
    @Length(max = 20, message = "`规格：反映药品的含量以及包装`的长度不能大于20")
    @TableField("DRUG_SPEC")
    private String drugSpec;

    /** `主键` db_field: FIRM_ID; desc: 厂家标识：反映生产厂家 */
    @ApiModelProperty("厂家标识：反映生产厂家")
    @NotNull(message = "厂家标识：反映生产厂家不能为空", groups = {PrimaryGroup.class,InsertGroup.class,UpdateGroup.class})
    @Length(max = 10, message = "`厂家标识：反映生产厂家`的长度不能大于10")
    @TableField("FIRM_ID")
    private String firmId;

    /** db_field: UNITS; desc: 单位：对应剂型及规格，使用规范名称，见4.32计量单位字典 */
    @ApiModelProperty("单位：对应剂型及规格，使用规范名称，见4.32计量单位字典")
    @Length(max = 8, message = "`单位：对应剂型及规格，使用规范名称，见4.32计量单位字典`的长度不能大于8")
    @TableField("UNITS")
    private String units;

    /** db_field: TRADE_PRICE; desc: 市场批发价：药库采购药品时的市场定价 */
    @ApiModelProperty("市场批发价：药库采购药品时的市场定价")
    @TableField("TRADE_PRICE")
    private BigDecimal tradePrice;

    /** db_field: RETAIL_PRICE; desc: 市场零售价：药品零售时的市场定价 */
    @ApiModelProperty("市场零售价：药品零售时的市场定价")
    @TableField("RETAIL_PRICE")
    private BigDecimal retailPrice;

    /** db_field: AMOUNT_PER_PACKAGE; desc: 包装数量：指单位包装中所含最小单位数量。如果已为最小单位，则为1 */
    @ApiModelProperty("包装数量：指单位包装中所含最小单位数量。如果已为最小单位，则为1")
    @TableField("AMOUNT_PER_PACKAGE")
    @NotNull(message = "包装数量不能为空", groups = {InsertGroup.class})
    private Long amountPerPackage;

    /** db_field: MIN_SPEC; desc: 最小单位规格：反映最小单位药品含量，与药品字典中定义规格同 */
    @ApiModelProperty("最小单位规格：反映最小单位药品含量，与药品字典中定义规格同")
    @Length(max = 20, message = "`最小单位规格：反映最小单位药品含量，与药品字典中定义规格同`的长度不能大于20")
    @TableField("MIN_SPEC")
    @NotEmpty(message = "最小单位规格不能为空", groups = {InsertGroup.class})
    private String minSpec;

    /** db_field: MIN_UNITS; desc: 最小单位：对应最小单位规格的单位，如片 */
    @ApiModelProperty("最小单位：对应最小单位规格的单位，如片")
    @Length(max = 8, message = "`最小单位：对应最小单位规格的单位，如片`的长度不能大于8")
    @TableField("MIN_UNITS")
    private String minUnits;

    /** `主键` db_field: START_DATE; desc: 起用日期：该价格的起用日期，执行日期含起用日期当天 */
    @ApiModelProperty("起用日期：该价格的起用日期，执行日期含起用日期当天")
    @NotNull(message = "起用日期：该价格的起用日期，执行日期含起用日期当天不能为空", groups = {PrimaryGroup.class,InsertGroup.class,UpdateGroup.class})
    @TableField("START_DATE")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
    private Date startDate;

    /** db_field: STOP_DATE; desc: 停止日期：该价格的停止执行日期，执行日期含停止日期当天 */
    @ApiModelProperty("停止日期：该价格的停止执行日期，执行日期含停止日期当天")
    @TableField("STOP_DATE")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
    private Date stopDate;

    /** db_field: MEMOS; desc: 备注：记录价格来源等信息 */
    @ApiModelProperty("备注：记录价格来源等信息")
    @Length(max = 40, message = "`备注：记录价格来源等信息`的长度不能大于40")
    @TableField("MEMOS")
    private String memos;

    @ApiModelProperty("修改前产家")
    @TableField(exist = false)
    private String oldFirmId;

    @ApiModelProperty("修改前起用日期")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
    @TableField(exist = false)
    private Date oldStartDate;

}